//
//  CZEmoticonTools.swift
//  CZ29VVeibo
//
//  Created by apple on 16/7/5.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

// 显示的列数
let EmoticonMaxCol = 7
// 显示的行数
let EmoticonMaxRow = 3
// 每页显示的个数
let EmoticonMaxCount = EmoticonMaxCol * EmoticonMaxRow - 1

class CZEmoticonTools: NSObject {
    // 全局访问点
    static let sharedTools: CZEmoticonTools = CZEmoticonTools()
    
    
    
    // 01 获得bundle
    lazy var emoticonBundle: NSBundle = {
        // 获取bundle路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // 返回bundle
        return NSBundle(path: path)!
    }()
    // default 表情 一维数组
    lazy var defaultEmoticons:[CZEmoticon] = {
       return self.getEmoticons("default/")
    }()
    // emoji 表情 一维数组
    lazy var emojiEmoticons:[CZEmoticon] = {
        return self.getEmoticons("emoji/")
    }()
    // 浪小花 表情 一维数组
    lazy var lxhEmoticons:[CZEmoticon] = {
        return self.getEmoticons("lxh/")
    }()
    
    // 表情三维数组
    lazy var allEmoticons:[[[CZEmoticon]]] = {
       return [
        self.getEmoticonsGroup(self.defaultEmoticons),
        self.getEmoticonsGroup(self.emojiEmoticons),
        self.getEmoticonsGroup(self.lxhEmoticons)]
    }()
///Users/apple/Desktop/29期iPhone项目/05-iPhone项目-第3天(项目框架搭建)/04-源代码/CZ29WB/CZ29Weibo/CZ29VVeibo/CZ29VVeibo/Classes/Compose/View/Emoticon/Emoticons.bundle/Contents/Resources/emoji/info.plist
    // 读取plist文件中的数组转成模型一维数组
    func getEmoticons(fileName: String) -> [CZEmoticon]{
        // 路径
        let file = emoticonBundle.pathForResource("\(fileName)info.plist", ofType: nil)!
        // plist 转数组
        let array = NSArray(contentsOfFile: file)!
        // 创建一个可变的临时数组
        var tempArray:[CZEmoticon] = [CZEmoticon]()
        
        // 遍历array
        for dic in array {
            let e = CZEmoticon(dict: dic as![String: AnyObject])
            // 获取路径
            e.path = "\(fileName)"
            // 保存模型
            tempArray.append(e)
        }
        // 数组返回
        return tempArray
    }
    /*
        目前有一维数组
            - 默认表情  一共108个
            - emoji表情 一共80个
            - 浪小花    一共40个
    
        把以上的一维数组转成二维数组
        默认表情
            [20 20 20 20 20 8] 0 -19  20- 39 ..... 100- 107
        emoji表情
            [20 20 20 20 ] 0-19 20 -39 40 -59
        浪小花
            [20 20]
    
    */
    // 一维数组转二维数组
    func getEmoticonsGroup(emoticons: [CZEmoticon]) -> [[CZEmoticon]]{
        // 计算页数
        let pageCount = (emoticons.count  + EmoticonMaxCount - 1) / EmoticonMaxCount
        
        // 创建一个临时的可变的二维数组
        var tempArray:[[CZEmoticon]] = [[CZEmoticon]]()
        //遍历pageCount
        for i in 0..<pageCount {
            // 位置和长度
            let loc = EmoticonMaxCount * i
            var len = EmoticonMaxCount
            // 防止默认表情数组越界
            if loc + len > emoticons.count {
                len = emoticons.count - loc
            }
            // 截取范围
            let range = NSMakeRange(loc, len)
            // 数组的截取
            let arr = (emoticons as NSArray).subarrayWithRange(range) as![CZEmoticon]
            // 保存一维数组
            tempArray.append(arr)
        }
        // 返回二维数组
        return tempArray
    }
    
    func getSearchEmoticon(chs: String) -> CZEmoticon?{
        
        // 遍历默认
        for e in defaultEmoticons {
            // 如果chs相同
            if e.chs == chs{
                return e
            }
        }
        
        // 遍历浪小花
        for e in lxhEmoticons {
            // 如果chs相同
            if e.chs == chs {
                return e
            }
        }
        
        return nil
    }
    
    
}

extension CZEmoticonTools{
    func test111(){
        // 遍历一维数组 截取一维数组
        // 正向遍历enumerate() .reverse() 倒序
//        for (i,e)in emoticons.enumerate(){
//            
//            let loc =
//            let len = EmoticonMaxCount
//            
//            // 截取范围
//            let range = NSMakeRange(<#T##loc: Int##Int#>, <#T##len: Int##Int#>)
//            
//            // 数组的截取
//            (emoticons as NSArray).subarrayWithRange(<#T##range: NSRange##NSRange#>)
//        }
    }
}










